热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Webpack初探:Import和Require的使用

本文介绍了Webpack中Import和Require的基本概念和使用方法,帮助读者更好地理解和应用模块化开发。

前言:本文由编程笔记小编整理,旨在介绍 Webpack 中 Import 和 Require 的相关知识,希望对您有所帮助。


传统 Javascript 的引入方式

在过去,Javascript 文件通常按功能划分,并在 HTML 页面中通过 script 标签引入。这种方法要求开发者手动管理文件的引入顺序,确保依赖关系正确。随着前端工程的发展,模块化概念逐渐普及,使得前端开发更加规范和高效。


1. Export

每个 Javascript 文件可以视为一个模块,该模块可以被其他模块引入。引入后的结果是对该模块的执行结果进行封装。然而,模块内部的私有变量和函数不会自动暴露给外部,因此需要使用 export 关键字来决定模块对外公开的内容。

export 用于从模块中导出函数、对象或原始值,以便其他模块通过 import 语句使用这些内容。

例如,在 module1.js 中:

function fun1() {
console.log('module - 1 : function 1');
}
let person = {
name: '张三'
};
let str = '我是module1定义的字符串';
export { fun1, person, str };

在 main.js 中引入并使用这些导出的内容:

import * as module1 from './module1.js';
console.log(module1);

此时,module1 对象包含了 fun1、person 和 str,可以通过 module1 访问这些内容。

export 导出的内容会被添加到模块对象中,可以理解为深拷贝。


2. Export Default

初学者可能会疑惑,已经有了 export 为什么还需要 export default?实际上,export default 是为了提供一个默认的导出接口。

修改 module1.js:

function f1() {
console.log('module - 1 : function 1');
}
let b = {
name: 'test_obj'
};
let str = 'hello';
export { f1, b, str };
export default {
name: 'default'
};

export default 的作用是给模块对象添加一个 default 属性,该属性的值是一个对象,与 export default 导出的内容完全一致。


3. 文件导出总结

一个 Javascript 文件被当作模块引入时,会暴露为一个对象。export 用于在该对象中添加属性,export default 用于设置对象的 default 属性。


4.1 导出整个文件对象

使用 import * 语法可以导入模块的所有接口,并通过 as 指定一个命名空间对象。例如:

import * as m1 from './m1.js';
console.log(m1);

m1 命名空间对象可以访问模块的所有对外接口,包括 export 和 export default 的内容。


4.2 导出部分接口

在实际开发中,我们可能只需要导入模块的部分接口。通过在 import 语句中解构模块对象,可以实现这一点:

import { f1, b } from './m1.js';
console.log(f1);
console.log(b);

注意,默认导出的接口无法通过这种方式直接解构,因为 default 是关键字,不能作为变量名使用。


4.3 导入默认接口

默认导出的接口可以通过 import 语句直接导入,例如:

import d from './m1.js';
console.log(d);

此时,d 就是模块对象的 default 属性值,即 export default 导出的内容。


5. 动态导入

import 不仅是一个关键字,还是一个函数,可以异步加载模块。函数的参数是模块路径,返回一个 Promise 对象:

import('./m1.js').then(m => {
console.log('then:', m);
});

在 then 回调中,m 是模块的整个对象,包括 export 和 export default 的内容。


6. 仅作为副作用导入

import 还可以仅执行模块中的代码,而不导入任何接口。例如,在 Vue 项目中,我们可以在 init.js 文件中编写初始化逻辑,然后在 main.js 中直接引入:

import './lib/init.js';

这样做可以保持 main.js 文件的简洁,同时实现模块化管理。


推荐阅读
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 本文将介绍如何在混合开发(Hybrid)应用中实现Native与HTML5的交互,包括基本概念、学习目标以及具体的实现步骤。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
    本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
  • 深入浅出 webpack 系列(二):实现 PostCSS 代码的编译与优化
    在前一篇文章中,我们探讨了如何通过基础配置使 Webpack 完成 ES6 代码的编译。本文将深入讲解如何利用 Webpack 实现 PostCSS 代码的编译与优化,包括配置相关插件和加载器,以提升开发效率和代码质量。我们将详细介绍每个步骤,并提供实用示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • HTML中span元素为何会脱离li元素对齐?
    在HTML布局中,有时会遇到span元素未能与li元素保持对齐的问题。本文将探讨这一现象的原因,并提供解决方案。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 本文介绍了如何使用 CMD 批处理脚本进行文件操作,包括将指定目录下的 PHP 文件重命名为 HTML 文件,并将这些文件复制到另一个目录。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
author-avatar
然后突然4_944
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有